/**
 * 结合局部化的css映射，生成一个新的jQuery，用于jQuery局部组件的开发
 */
import $ from 'jquery';

/**
 * 局部jQuery生成函数
 * @param {*} locals 局部化的css映射
 */
export default function (locals) {
  // 将字符串转为模块化后的字符串
  var localize = function (str) {
    // 替换html中的id和class，请确保带有引号，多个class之间用空格隔开
    var reg = /((id|class)=['"])([\w- ]+)/g;
    str = str.replace(reg, function (kw, prefix, name, value) {
      value = value.split(/\s+/).map(function (key) {
        return locals[key] || key;
      }).join(' ');
      return prefix + value;
    });

    // 替换selector中的id和class
    var reg = /([#.])([\w-]+)/g;
    str = str.replace(reg, function (kw, prefix, value) {
      value = locals[value] || value;
      return prefix + value;
    });

    return str;
  };

  var jQuery = function (selector, context) {
    selector = localize(selector);
    return new jQuery.fn.init(selector, context);
  };

  jQuery.fn = jQuery.prototype = $.extend({}, $.fn, {
    constructor: jQuery,
  });

  $.extend(jQuery, $);

  return jQuery;
};
